【php代码审计】AyaCMS 3.1.2 任意文件上传漏洞

漏洞描述

在AyaCMS3.1.2的ajax.php文件中调用了一个文件文件上传函数,该函数未对文件后缀进行过滤,导致任意文件上传,可通过该上传接口上传webshell。

漏洞版本

AyaCMS 3.1.2

环境搭建

  • nginx 1.5.11

  • php 5.6.9 nts

  • mysql 5.7.26

  • ayacms 3.1.2

漏洞复现

登录后台,位置在

image-20221120124331528

上传一个webshell

image-20221120124532356
image-20221120124639865

通过burp可以看到回显的文件名

image-20221120124758196

上传路径在代码中可以看到在AYA_ROOT根目录下的upload/~tmp/路径下,注意这里并不是网站根目录,而是在aya目录下。

1
127.0.0.1:805/aya/upload/~tmp/16689195386710.php
image-20221120125151921

漏洞分析

漏洞点入口在 ajax.php 424行

image-20221120125326271

upload_file分支中调用了一个upload的函数,我们跟进去

image-20221120125419788

包含了include/uploadifive/uploadifive.php 这个文件,继续跟进

image-20221120125509527

文件上传的关键代码在这个文件中,经过分析,可以发现,并未对上传文件经过任何处理,有一个验证文件后缀的黑名单还被注释掉了,可能是开发者疏忽了,所以可以直接上传php文件。

修复建议

增加文件后缀黑名单,对上传文件内容做验证。

参考材料

https://github.com/loadream/AyaCMS/issues/4